Docker

您所在的位置:网站首页 mimei all rights reserved Docker

Docker

#Docker | 来源: 网络整理| 查看: 265

文章目录 原创声明前言一、什么是 TensorRT二、搭建方案一:手工搭建(知其然,知其所以然)过程方案一中可能出现的错误 方案二:Dockerfile 一键搭建(爽) 总结参考授权须知

原创声明

本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!

前言

我们平时训练 or 部署的环境, TensorFlow 和 Pytorch 有时候会出现兼容性导致的错误,如果线上已经部署了多个 TensorFlow 模型的情况下,后续要继续使用 TensorFlow 而不能使用 Pytorch 写的更好的网络,这导致我们在模型选型的时候很受制约,但是 TensorRT 可以解决这个问题。

另外,我们如果直接使用 Python 部署的话,其作为解释语言的处理速度无法超过编译语言,这导致推理会比较耗时,但是如果使用 TensorRT 的话,可以很好的对网络进行加速,提升 10倍+ 的速度,真正做到模型推理速度起飞的效果。

另外,如果在宿主机直接安装,可能会出现和开发or训练环境不同的系统配置,有一定的风险,借助 Docker 容器的便捷性,更加能够快速进行 TensorRT 的搭建 ,下面我就为大家带来 Docker 搭建 TensorRT 的环境。

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!

一、什么是 TensorRT

NVIDIA® TensorRT™的核心是一个C++库,它有助于NVIDIA图形处理单元(GPU)的高性能推理。它被设计成一种与训练框架(如TensorFlow、PyTorch、MXNet等)互补的工作方式。它特别关注于在GPU上快速高效地运行已经训练过的网络。

一些训练框架如TensorFlow已经集成了TensorRT,因此可以使用它来加速框架内的推理。或者,TensorRT可以用作用户应用程序中的库。它包括一个Onnx解析器和C++和Python API,用于以编程方式构建模型。

图1.TensorRT是一个用于产品部署的高性能神经网络推理优化器和运行时引擎。 在这里插入图片描述

TensorRT通过组合层和优化内核选择来优化网络,以提高延迟、吞吐量、能效和内存消耗。如果应用程序指定,它将进一步优化网络以较低的精度运行,进一步提高性能并减少内存需求。

下面就让我们开始搭建 TensorRT 的环境吧。

二、搭建

本文介绍两种方法进行 docker 环境的搭建:

手工搭建(知其然,知其所以然)Dockerfile 一键搭建(爽)

注意:无论使用什么方式都需要在宿主机先安装 NVIDIA-Docker ,安装方式可以参考我之前的文章:Docker 搭建深度学习环境镜像,一次搭建,无限部署! 中的 【四、NVIDIA-Docker】。

方案一:手工搭建(知其然,知其所以然) 过程

浏览 nvidia 官方的 dockerhub 镜像库: nvidia/cuda ,选择你使用的环境。如果没有的话,就点击这里,获取最全列表: 在这里插入图片描述 可以看到很多版本的 tag 名称: 在这里插入图片描述

我这里选择的是 10.0-cudnn7-devel-ubuntu18.04,使用命令拉取

docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04

进入镜像

docker run -it --name 容器名称 --gpus all \ -v 需要映射外部路径:容器内部路径 镜像名 /bin/bash

进入 docker

查看 cuda 和 cudnn 版本

cat /usr/local/cuda/version.txt cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

查看发行版

cat /etc/issue

登录官网:NVIDIA TensorRT 下载 TensorRT 在这里插入图片描述

找到需要的版本号: 在这里插入图片描述

同意条约: 在这里插入图片描述

选择对应的系统和版本进行下载:我选择了 TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz,您根据自己需要的现在即可。 在这里插入图片描述

这里附上 TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz 下载的 link

https://developer.nvidia.com/compute/machine-learning/tensorrt/secure/7.0/7.0.0.11/tars/TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz

安装tensorRT

解压:

tar -zxvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz

添加环境变量:

vim ~/.bashrc export LD_LIBRARY_PATH=解压TensorRT的路径/TensorRT-7.0.0.11/lib:$LD_LIBRARY_PATH source ~/.bashrc

安装 python

apt-get install -y --no-install-recommends \ python3 \ python3-pip \ python3-dev \ python3-wheel &&\ cd /usr/local/bin &&\ ln -s /usr/bin/python3 python &&\ ln -s /usr/bin/pip3 pip;

pip 安装对应的 TensorRT 库,注意,一定要使用 pip 本地安装 tar 附带的 whl 包!

cd TensorRT-7.0.0.11/python/ sudo pip3 install tensorrt-7.0.0.11-cp36-none-linux_x86_64.whl

测试 TensorRT 的 python 接口,出现下图就显示成功! 在这里插入图片描述

方案一中可能出现的错误

安装 pychuda 出现错误: ERROR: Could not build wheels for pycuda which use PEP 517 and cannot be installed directly

pip install pychuda

在这里插入图片描述 这是因为安装的版本太新了,装旧版本即可:

pip install pycuda==2018.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

显示中文出现: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128) 在这里插入图片描述 (1) 查看容器的语言环境

locale

输出:

LANG= LANGUAGE= LC_CTYPE="POSIX"

(2) 查看容器支持的语言

locale -a

输出:

C C.UTF-8 POSIX

(3) 修改 /etc/profile

vi /etc/profile

在文件的在最后添加:

export LANG=C.UTF-8

(4) 重新加载环境变量

source /etc/profile

(5) 再次查看容器的语言环境

locale

成功!

LANG=C.UTF-8 LANGUAGE= LC_CTYPE="C.UTF-8" 方案二:Dockerfile 一键搭建(爽)

将下面的代码保存成文件 Dokerfile

# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ARG CUDA_VERSION=10.0 ARG CUDNN_VERSION=7 ARG OS_VERSION=18.04 FROM nvidia/cuda:${CUDA_VERSION}-cudnn${CUDNN_VERSION}-devel-ubuntu${OS_VERSION} LABEL maintainer="HinGwen Woong" # ENV TRT_VERSION 7.2.3.4 ENV TRT_VERSION 7.0.0.11 SHELL ["/bin/bash", "-c"] # 将 apt 的升级源切换成 阿里云 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \ apt-get clean && \ rm /etc/apt/sources.list.d/* # 安装必要的库 RUN apt-get update && apt-get install -y software-properties-common RUN add-apt-repository ppa:ubuntu-toolchain-r/test RUN apt-get update && apt-get install -y --no-install-recommends \ libcurl4-openssl-dev \ wget \ zlib1g-dev \ git \ pkg-config \ sudo \ ssh \ libssl-dev \ pbzip2 \ pv \ bzip2 \ unzip \ devscripts \ lintian \ fakeroot \ dh-make \ build-essential \ libgl1-mesa-glx # 安装 python3 环境 RUN apt-get install -y --no-install-recommends \ python3 \ python3-pip \ python3-dev \ python3-wheel &&\ cd /usr/local/bin &&\ ln -s /usr/bin/python3 python &&\ ln -s /usr/bin/pip3 pip; # 安装 TensorRT RUN cd /tmp &&\ wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb &&\ dpkg -i nvidia-machine-learning-repo-*.deb && apt-get update RUN v="${TRT_VERSION%.*}-1+cuda${CUDA_VERSION%.*}" &&\ apt-get install -y libnvinfer7=${v} libnvinfer-plugin7=${v} libnvparsers7=${v} libnvonnxparsers7=${v} libnvinfer-dev=${v} libnvinfer-plugin-dev=${v} libnvparsers-dev=${v} python3-libnvinfer=${v} &&\ apt-mark hold libnvinfer7 libnvinfer-plugin7 libnvparsers7 libnvonnxparsers7 libnvinfer-dev libnvinfer-plugin-dev libnvparsers-dev python3-libnvinfer # 升级 pip 并切换成国内豆瓣源 RUN python3 -m pip install -i https://pypi.douban.com/simple/ --upgrade pip RUN pip3 config set global.index-url https://pypi.douban.com/simple/ RUN pip3 install setuptools>=41.0.0 # 升级 Cmake(可选) RUN cd /tmp && \ wget https://github.com/Kitware/CMake/releases/download/v3.14.4/cmake-3.14.4-Linux-x86_64.sh && \ chmod +x cmake-3.14.4-Linux-x86_64.sh && \ ./cmake-3.14.4-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir --skip-license && \ rm ./cmake-3.14.4-Linux-x86_64.sh # 设置环境变量和工作路径 ENV TRT_LIBPATH /usr/lib/x86_64-linux-gnu ENV TRT_OSSPATH /workspace/TensorRT ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRT_OSSPATH}/build/out:${TRT_LIBPATH}" WORKDIR /workspace # 设置语言环境为中文,防止 print 中文报错 ENV LANG C.UTF-8 RUN ["/bin/bash"]

构建镜像的指令,其中 hingwenwoong/tensorrt-docker:v1 的是构建镜像的命名,自行修改; 注意:最后的 . 不要漏掉了!

sudo docker build -t hingwenwoong/tensorrt-docker:v1 -f ./Dockerfile .

新建并进入容器,其中容器名hingwenwoong/tensorrt-docker:v1 根据上一步设置的来修改:

docker run -it --name 容器名称 --gpus all \ -v 需要映射外部路径:容器内部路径 hingwenwoong/tensorrt-docker:v1 /bin/bash

在 python3 环境中测试 TensorRT 的 python 接口,出现下图就显示成功! 在这里插入图片描述

总结

以上就是使用 Docker 快速进行 TensorRT 环境的搭建,希望能够祝您一臂之力,减少搭建环境的需要的时间和精力!

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!

更多阅读推荐 Docker 搭建深度学习环境镜像,一次搭建,无限部署! 参考 [1] NVIDIA\TensorRT\docker[2] Docker:Ubuntu容器中中文变成方块(中文乱码;不支持中文)解决办法[3] NVIDIA Deep Learning TensorRT Documentation 授权须知 原创文章在推送一天后才可进行转载转载文章,禁止声明原创不允许直接二次转载,转载请根据原文链接联系作者若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。 但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:HinGwenWoong 一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步! CSDN: HinGwenWoong 原文链接:Docker | Docker 快速搭建 TensorRT 环境(超详细)

若需要修改文章的排版,请根据原文链接联系作者再次感谢您的认可,转载请遵守如上转载须知!


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3